sequence 分布式发号器使用

背景

全局生成唯一的 ID,适合定义业务流水编号例如

2019100500001
2019100500002
2019100500003

2019100600001
2019100600002
2019100600003

依赖

<dependency>
	<groupId>com.pig4cloud</groupId>
	<artifactId>pigx-common-sequence</artifactId>
</dependency>

发号器配置

  • 定义切片规则,例如按日期递增
@Configuration
public class SequenceConfig {

    /**
     * 创建并配置Sequence对象的方法
     *
     * @param properties 用于构建Sequence的配置属性
     * @return 构建完成的Sequence对象
     */
    @Bean
    public Sequence sequence(BaseSequenceProperties properties) {
        return DbSeqBuilder
                .create()
                .bizName(DateUtil::today)// 定义切片规则,每天从 0 开始切片
                .step(1000)     // 每次获取数据的个数
                .retryTimes(3)   // 重试次数
                .tableName(properties.getDb().getTableName())
                .build();
    }
}

使用

@Autowired
private Sequence sequence;

// 默认返回的格式是  yyyyMMdd00001 这种格式
sequence.nextNo()

自定义格式

默认格式

nextNo: 默认返回输出格式为 yyyyMMdd00001,如有特殊需求可以自行格式化

sequence.nextValue() 的输出结果为

1
2
3
4
5
//--- 按切片规则重置
1
2

则可以 String.format("%s%05d", "拼接前缀进行展示", sequence.nextValue());

配置属性

属性名称默认值描述
pigx.xsequence.db.dbTypeMYSQL默认数据库类型
pigx.xsequence.db.tableNamepigx_sequence表名称
pigx.xsequence.db.retryTimes1重试次数